package com.zhang.yygh.common.handler;

import com.zhang.yygh.common.exception.YYGHException;
import com.zhang.yygh.common.result.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

//@ControllerAdvice+@ResponseBody
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    //统一返回一致的返回结果：全局统一异常处理
    @ExceptionHandler(value = {Exception.class})
    public R handleAllException(Exception ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        //ex.printStackTrace();
        log.error("全局异常："+ex.getMessage());
        return R.error().message("出异常了。。。");
    }

    //特定异常处理：根据不同的异常，可以提示不同的信息
    @ExceptionHandler(value = {ArithmeticException.class})
    public R handleAllException(ArithmeticException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        //ex.printStackTrace();
        log.error("数学异常："+ex.getMessage());
        return R.error().message("数学异常。。。");
    }

    //特定异常处理：根据不同的异常，可以提示不同的信息
    @ExceptionHandler(value = {SQLException.class})
    public R handleAllException(SQLException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        //ex.printStackTrace();
        log.error("Sql异常："+ex.getMessage());
        return R.error().message("Sql异常。。。");
    }

    //自定义异常处理
    @ExceptionHandler(value = {YYGHException.class})
    public R handleYYGHException(YYGHException ex){
        //实际开发中，一般会把异常信息记录到日志中，log4j
        //ex.printStackTrace();
        log.error("YYGHException异常信息为："+ex.getMessage());
        return R.error().message(ex.getMessage());
    }
}
